package main

//导入所需要的库，这个test2库是我自己写的

//这边蛮备份一遍，避免因为注释代码导致导入库消失，从而引起报错
//import (
//	test2 "./test2"		//导入文件夹test2，并将其取别名为test2，这样之后使用这个文件夹下的方法就只需要使用test2.Xxxx()就可以使用了
//						// ./表示相对路径，意思是在本文件的同一级目录下，   而../表示在本文件上一级目录，所以"./test2"也可以写成"../main/test2"
//	"fmt"
//
//)
import (
	test "./test2"		//导入文件夹test2，并将其取别名为test，这样之后使用这个文件夹下的方法就只需要使用test.Xxxx()就可以使用了
						// ./表示相对路径，意思是在本文件的同一级目录下，   而../表示在本文件上一级目录，所以"./test2"也可以写成"../main/test2"
	"fmt"

)


//写在最开头，两个斜杠的这种东西叫注释，只是用来帮助程序猿看代码的，通常可以在关键的代码部分增加注释，避免检查代码时花太多时间理解代码的功能
/*
	这种也是注释,两种注释方法，这种就可以直接写好几行的注释了，双斜杠必须每行都加
*/
//所有的项目都必须有一个main函数，作为整个项目的入口，不过通常如果是使用框架，这些东西都是框架封装好的，所以在使用框架的时候只需要写自己需要的方法就行了
// func表示函数，每一个需要实现的功能可以单独写成一个函数，方便后期重复使用

func main() {

	a := 3
	b := "bbb"
	c := true
	doNoting(a, b, c)

	/*

	 */

	fmt.Println("------------------------test1-------------------------")
	//引用test1.go文件中的test1方法
	test1()				//如何声明变量（基础方法和快捷方法）

	fmt.Println("------------------------test2-------------------------")
	//注意golang有一个很重要的语法，方法名首字母大写，表示可以被不同路径下的其他方法引用，同一路径下的方法可以是首字母小写的，比如上面的test1()和main()就在同一路径下
	//如果Test2()方法写成test2()就无法使用了
	test.Test2()		//这里学习一下最基础的加减乘除

	fmt.Println("------------------------test3-------------------------")
	test3(a)			//如何传递参数（在这个方法中使用其他地方的获得的数据），把a传进test3()方法中

	fmt.Println("------------------------test4-------------------------")
	test4(a, b, c)		//传递多个参数，需要按方法中设定的顺序传入，否则会导致数据错乱或报错
						// 就像算a-b，结果a和b传入顺序反了，就会算成b-a，或者本来是int型的参数传成string类型就类型出错了

	fmt.Println("------------------------test5-------------------------")
	test5()				//如何输入参数

	fmt.Println("------------------------test6-------------------------")
	test6()				//如何返回数据，最重要的功能之一

	fmt.Println("------------------------test7-------------------------")
	test7()				//返回数据的不同写法

	fmt.Println("------------------------test8-------------------------")
	test8()				//字符串的切分

	fmt.Println("------------------------test9-------------------------")
	test9()				//字符串的合并

	fmt.Println("------------------------test10------------------------")
	test10()			//强制类型转换（常用）

	fmt.Println("------------------------test11------------------------")
	test11()			//初始化结构体以及如何取出结构体内的数据

	fmt.Println("------------------------test12------------------------")
	test12()			//修改某个结构体变量内容

	fmt.Println("------------------------test13------------------------")
	test13()			//初始化数组

	fmt.Println("------------------------test14------------------------")
	test14()			//增加数组元素

	fmt.Println("------------------------test15------------------------")
	test15()			//删除数组元素

	fmt.Println("------------------------test16------------------------")
	test16(a)			//查询数组第n位元素

}

//这个方法不要在意，我用来确保每个变量都被使用过，避免报错用的
//不过还是顺便教一下，这个传入的参数表示传入任意个数的任意类型变量（请看完test5再理解）
func doNoting( ... interface{})  {

}